﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BolsaTrabajo.BusinessEntities;
using BolsaTrabajo.DataAccess;
using System.Transactions;
using System.Data;

namespace BolsaTrabajo.BusinessLogic
{
    public class PostulanteLogic
    {
        PostulanteData odata = null;

        public PostulanteLogic()
        {
            odata = new PostulanteData();
        }

        public Postulante CargarEntidad(Int32 id)
        {
            Postulante resultado = null;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.CargarEntidad(id);
                    tx.Complete();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return resultado;
        }

        public Boolean Registrar(Postulante item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Registrar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public Boolean Actualizar(Postulante item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Actualizar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public Boolean Eliminar(Postulante item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Eliminar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public DataTable ListarPostulantes(String pagina, Int32 estado)
        {
            return odata.ListarPostulantes(pagina, estado);
        }

        public Boolean RegistrarPostulante(String ApplicationId, String UserID, String Nombre, String ApellidoPaterno, String ApellidoMaterno, String Sexo, DateTime FechaNacimiento, String Correo, String Distrito, String Direccion, String TelefonoCelular, String TipoDocumento, String NumeroDocumento, String EstadoCivil, String NivelEstudios, String Profesion, Boolean Disponibilidad, String ExperienciaProfesional, String NivelIngles, String ExpectativasSalariales)
        {
            Boolean resultado = true;
            PostulanteLogic BLPostulante = new PostulanteLogic();
            Postulante BEPostulante = new Postulante();

            BEPostulante = BLPostulante.ObtenerEntidadPorCorreo(Correo); 

            Postulante postulanteACrear = new Postulante();
            postulanteACrear.ApplicationId = new Guid(ApplicationId);
            postulanteACrear.UserId = new Guid(UserID);
            postulanteACrear.Nombre = Nombre;
            postulanteACrear.ApellidoPaterno = ApellidoPaterno;
            postulanteACrear.ApellidoMaterno = ApellidoMaterno;
            postulanteACrear.Sexo = Sexo;
            postulanteACrear.FechaNacimiento = FechaNacimiento;

            //postulanteACrear.Correo = Correo;
            if (BEPostulante.Correo != Correo)
            {
                postulanteACrear.Correo = Correo;
            }
            else
            {
                resultado = false;
                return resultado;
            }

            BEPostulante = null;

            postulanteACrear.Distrito = Distrito;
            postulanteACrear.Direccion = Direccion;
            postulanteACrear.TelefonoCelular = TelefonoCelular;
            postulanteACrear.TipoDocumento = TipoDocumento;
            //postulanteACrear.NumeroDocumento = NumeroDocumento;

            BEPostulante = BLPostulante.ObtenerEntidadPorDNI(NumeroDocumento);

            if (BEPostulante.NumeroDocumento != NumeroDocumento)
            {
                postulanteACrear.NumeroDocumento = NumeroDocumento;
            }
            else
            {
                resultado = false;
                return resultado;
            }

            postulanteACrear.EstadoCivil = EstadoCivil;
            postulanteACrear.NivelEstudios = NivelEstudios;
            postulanteACrear.Profesion = Profesion;
            postulanteACrear.Disponibilidad = Disponibilidad;
            postulanteACrear.ExperienciaProfesional = ExperienciaProfesional;
            postulanteACrear.NivelIngles = NivelIngles;
            postulanteACrear.ExpectativasSalariales = ExpectativasSalariales;
            
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Registrar(postulanteACrear);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }

            return resultado;
        }

        public Postulante ObtenerEntidadPorDNI(String dni)
        {
            Postulante resultado = null;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ObtenerEntidadPorDNI(dni);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }

        public Postulante ObtenerEntidadPorCorreo(String correo)
        {
            Postulante resultado = null;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ObtenerEntidadPorCorreo(correo);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }

        public List<Postulante> ListarCabeceraPorAvisoEmpresa(Int32 idAvisoTrabajo, Int32 idEmpresa)
        {
            List<Postulante> resultado = new List<Postulante>();
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ListarCabeceraPorAvisoEmpresa(idAvisoTrabajo, idEmpresa);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }

        public List<Postulante> ListarDetallePorPostulante(Int32 idAvisoTrabajo, Int32 idEmpresa, Int32 idPostulante)
        {
            List<Postulante> resultado = new List<Postulante>();
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ListarDetallePorPostulante(idAvisoTrabajo, idEmpresa, idPostulante);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }
    }
}
